Descubro Android Cetpack Compose (y Navigation) e intento mostrar una vista previa de una vista con un navController como parámetro.
Para lograrlo, uso PreviewParameter y no tengo ningún error, pero no aparece nada en la ventana de vista previa.
¿Alguien sabe cómo pasar una instancia falsa de NavController a Composable?
class FakeNavController : PreviewParameterProvider<NavController> { override val values: Sequence<NavController> get() {} } @Preview @Composable fun Preview( @PreviewParameter(FakeNavController::class) fakeNavController: NavController ) { HomeView(fakeNavController) }PreviewParameter se usa para crear múltiples vistas previas de la misma vista con diferentes datos. Se espera que devuelva los valores necesarios de values . En su ejemplo, no devuelve nada, por eso no funciona (ni siquiera se compila en mi caso).
Eso no lo ayudará a simular el controlador de navegación, ya que aún necesita crearlo de alguna manera para regresar de values . creo que es imposible
En su lugar, puede pasar un controlador, en este caso no necesita burlarse de él:
@Composable fun HomeView(openOtherScreen: () -> Unit) { } // your Navigation view composable(Destinations.Home) { from -> HomeView( openOtherScreen = { navController.navigate(Destinations.Other) }, ) }No tienes que hacerlo anulable y pasarle nulo. Solo necesitas pasar esto: rememberNavController()
@Preview @Composable fun Preview() { HomeView(rememberNavController()) }Finalmente, declaro un NavController anulable y funciona.
@Composable fun HomeView(navController: NavController?) { Surface { Column( modifier = Modifier .padding(all = 4.dp) ) { Text( text = "Home View", style = MaterialTheme.typography.body2 ) Spacer(modifier = Modifier.height(8.dp)) Button(onClick = { navController?.navigate("lineRoute") }) { Text(text = "nav to Line view") } } } } @Preview @Composable fun Preview (){ HomeView(null) }